package com.cqc.jdk8.Jio.bytes.output;

import org.junit.Test;

import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;

public class FileOutputStreamTest {


    @Test
    public void f1() throws Exception {
        String filename = "C:\\Users\\cui\\Desktop\\fos1.txt";
        FileOutputStream fos = new FileOutputStream(filename, false);
        fos.write("1".getBytes(StandardCharsets.UTF_8));
        fos.write("国家".getBytes(StandardCharsets.UTF_8));
        fos.flush();
        fos.close();
    }

    /**
     * FileOutputStream 生成csv文件包含中文时，用excel打开会乱码，用txt打开不会乱码问题
     * 原因是：  https://my.oschina.net/u/4416801/blog/3468246
     * 解决方法一：  文件开头就写入编码
     * byte[] bs = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
     * fos.write(bs);
     * 解决方法二： 其中一处中文前后\t并指定U8编码  无效
     */
    @Test
    public void f2() throws Exception {
        String filename = "C:\\Users\\cui\\Desktop\\fos2.csv";
        FileOutputStream fos = new FileOutputStream(filename, false);
        fos.write("\t姓名\t,\t年龄\t,\t班级\t".getBytes(StandardCharsets.UTF_8));
        fos.write(System.lineSeparator().getBytes(StandardCharsets.UTF_8));
        fos.write("张三,15,一班".getBytes(StandardCharsets.UTF_8));
        fos.write(System.lineSeparator().getBytes(StandardCharsets.UTF_8));
        fos.write("李四,16,二班".getBytes(StandardCharsets.UTF_8));

        fos.flush();
        fos.close();
    }

    @Test
    public void f3() throws Exception {
        String filename = "C:\\Users\\cui\\Desktop\\fos3.csv";
        FileOutputStream fos = new FileOutputStream(filename, false);
        //EF BB BF（UTF-8的BOM编码）
        byte[] bs = {(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
        fos.write(bs);
        fos.write("姓名,年龄,班级".getBytes(StandardCharsets.UTF_8));
        fos.write(System.lineSeparator().getBytes(StandardCharsets.UTF_8));
        fos.write("张三,15,一班".getBytes(StandardCharsets.UTF_8));
        fos.write(System.lineSeparator().getBytes(StandardCharsets.UTF_8));
        fos.write("李四,16,二班".getBytes(StandardCharsets.UTF_8));

        fos.flush();
        fos.close();
    }
}
